Decoradores (decorators) são funções que são aplicadas em outras funções e retornam funções modificadas. Decoradores tanto podem ser usados para criar ou alterar características das funções (que são objetos) quanto para “envolver” as funções, acrescentando uma camada em torno delas com novas funcionalidades.
A partir do Python 2.4, o caractere “@” pode ser usado para automatizar o processo de aplicação do decorador:
In [1]:
def decorator(f):
f.decorated = True
return f
@decorator
def func(arg):
return arg
Com isso, foi criado um atributo novo na função, que pode ser usado depois, quando a função for executada.
Exemplo:
In [2]:
# Função decoradora
def dumpargs(f):
# Função que envolverá a outra
def func(*args):
# Mostra os argumentos passados para a função
print args
# Retorna o resultado da função original
return f(*args)
# Retorna a função modificada
return func
@dumpargs
def multiply(*nums):
m = 1
for n in nums:
m = m * n
return m
print multiply(1, 2, 3)
A saída apresenta os parâmetros que a função decorada recebeu.
In [1]:
Out[1]: